// 发货单模型定义文件
// 该文件定义了发货单数据表的结构和相关配置

const Sequelize = require('sequelize');

/**
 * 定义发货单模型
 * @param {Sequelize} sequelize - Sequelize实例
 * @param {DataTypes} DataTypes - Sequelize数据类型
 * @returns {Model} 发货单模型
 * 
 * 该函数定义了delivery_orders表的结构和配置
 * 包括字段定义、索引、时间戳等配置
 */
module.exports = function(sequelize, DataTypes) {
  return sequelize.define('delivery_orders', {
    // 发货单ID字段 - 主键，自增
    delivery_id: {
      autoIncrement: true,
      autoIncrementIdentity: true,
      type: DataTypes.INTEGER,
      allowNull: false,
      primaryKey: true
    },
    
    // 发货单编号字段 - 格式为FH+日期+4位随机数
    delivery_number: {
      type: DataTypes.STRING(20),
      allowNull: false,
      unique: true
    },
    
    // 发货日期字段
    delivery_date: {
      type: DataTypes.DATEONLY,
      allowNull: false
    },
    
    // 快递公司ID字段 - 外键，关联到快递公司表
    courier_id: {
      type: DataTypes.INTEGER,
      allowNull: true
    },
    
    // 快递公司名称字段
    courier_name: {
      type: DataTypes.STRING(100),
      allowNull: true
    },
    
    // 快递单号字段
    tracking_number: {
      type: DataTypes.STRING(100),
      allowNull: true
    },
    
    // 发货人字段
    delivered_by: {
      type: DataTypes.STRING(100),
      allowNull: true
    },
    
    // 备注字段
    notes: {
      type: DataTypes.TEXT,
      allowNull: true
    },
    
    // 状态字段 - 1:待发货, 2:已发货, 3:已签收
    status: {
      type: DataTypes.INTEGER,
      allowNull: false,
      defaultValue: 1
    }
  }, {
    tableName: 'delivery_orders',
    schema: 'public',
    hasTrigger: true,
    timestamps: true,
    createdAt: 'created_at',
    updatedAt: 'updated_at',
    indexes: [
      {
        name: "delivery_orders_pkey",
        unique: true,
        fields: [
          { name: "delivery_id" }
        ]
      },
      {
        name: "delivery_orders_delivery_number_unique",
        unique: true,
        fields: [
          { name: "delivery_number" }
        ]
      }
    ]
  });
};